<?php

/**
 * Homologacion form.
 *
 * @package    sistema_estadisticas
 * @subpackage form
 * @author     Your name here
 * @version    SVN: $Id: sfDoctrineFormTemplate.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class HomologacionForm extends BaseHomologacionForm
{

	public static $OPC_ID = 'opciones';
	public static $OPC_SEL = 'seleccionar';
	public static $OPC_AGR = 'agregar';
	
	public function configure()
	{
		if ($this->isNew())
		{
			$this->widgetSchema[self::$OPC_ID] = new sfWidgetFormSelectRadio(
				array(
					'choices' => array(
						self::$OPC_SEL => 'Seleccionar un estudiante existente',
						self::$OPC_AGR => 'Agregar un nuevo estudiante'),
					'separator' => '<br>',
					'default' => self::$OPC_SEL
				)
			);

			$this->widgetSchema['estudiante_id'] = new WidgetFormAutocomplete(
				array('model' => 'Estudiante', 'action' => 'estudiante/buscar')
			);

			$this->validatorSchema[self::$OPC_ID] = new sfValidatorChoice(
				array('choices' => array(self::$OPC_SEL, self::$OPC_AGR))
			);

			$form = new EstudianteForm();
			$formatter = new WidgetFormSchemaFormatterDiv($form->getWidgetSchema());
			$form->widgetSchema->addFormFormatter('div_formatter',$formatter);
			$form->widgetSchema->setFormFormatterName('div_formatter');
			$form->useFields(array('identificacion', 'nombres', 'apellidos', 'correo'));

			$this->embedForm('Estudiante', $form);

			$this->validatorSchema = new HomologacionValidatorSchema($this->validatorSchema->getFields());
		}
		else
		{
			$this->widgetSchema['estudiante_id'] = new WidgetFormHiddenInfo(
				array(
					'model' => 'Estudiante',
					'display_value' => $this->getObject()->getEstudiante(),
					'column' => null
				)
			);

			$this->embedForm('Estudiante', new sfForm()); //usado en la vista
		}

		$this->validatorSchema->setPostValidator(
			new sfValidatorDoctrineUnique(array('model' => 'Homologacion', 'column' => array('estudiante_id')))
		);
		$this->validatorSchema->getPostValidator()
			->setMessage('invalid', 'Ya existe una homologación para este Estudiante.');

		$this->widgetSchema['modulo_destino'] = new sfWidgetFormChoice(array('choices' => Constantes::$MODULOS));
		$this->widgetSchema['ciclo_procedencia'] = new sfWidgetFormChoice(array('choices' => Constantes::$MODULOS));
		$this->widgetSchema['f_peticion'] = new WidgetFormDatePick();

		$this->widgetSchema['archivo'] = new sfWidgetFormInputFileEditable(
			array(
				'file_src' => $this->getObject()->getArchivo(),
				'with_delete' => true
			)
		);

		$this->validatorSchema['archivo'] = new sfValidatorFile(
			array(
				'mime_types' => 'web_images',
				'path' => sfConfig::get('homologacion_dir'),
				'required' => false,
				'validated_file_class' => 'ValidatedFile'
			)
		);

		$this->validatorSchema['archivo_delete'] = new sfValidatorPass();
	}

	public function getJavaScripts() 
	{
		if ($this->isNew())
			return array_merge(parent::getJavaScripts(), array('form.js'));

		return parent::getJavaScripts();
	}

	protected function doSave($con = null)
	{
		if (null === $con)
		{
			$con = $this->getConnection();
		}

		$this->updateArchivoFilename();
		$this->updateObject();

		if ($this->offsetExists('Estudiante'))
			$this->getObject()->getEstudiante()->setCarreraId($this->getObject()->getCarreraDestino());

		$this->getObject()->save($con);
	}

	private function updateArchivoFilename()
	{
		$validated = $this->values['archivo'];
	
		if($validated !== null)
		{
			if(isset($this->values['estudiante_id']))
				$validated->setSavedName(EstudianteTable::getInstance()->getIdentificacionById($this->values['estudiante_id']));
			else 
				$validated->setSavedName($this->values['Estudiante']['identificacion']);
		}
	}
	
}
